<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('ability_assessments', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联信息
            $table->unsignedBigInteger('employee_id'); // 被评定员工
            $table->unsignedBigInteger('evaluator_id'); // 评定人
            $table->unsignedBigInteger('position_id')->nullable(); // 岗位ID
            $table->string('position_name', 100)->nullable(); // 岗位名称

            // 评定信息
            $table->string('assessment_type', 20); // 评定类型：annual, probation, promotion, regular
            $table->string('assessment_period', 50); // 评定周期：2024-Q1, 2024-H1, 2024
            $table->date('assessment_date'); // 评定日期
            $table->date('effective_date'); // 生效日期

            // 评分结果
            $table->json('dimension_scores'); // 各维度评分：[{"dimension_id": 1, "score": 85, "comment": "..."}, ...]
            $table->decimal('total_score', 5, 2)->nullable(); // 总分
            $table->decimal('weighted_score', 5, 2)->nullable(); // 加权总分
            $table->string('overall_rating', 20)->nullable(); // 总体评级：A, B, C, D, F

            // 评定内容
            $table->text('strengths')->nullable(); // 优势
            $table->text('weaknesses')->nullable(); // 劣势
            $table->text('improvement_plan')->nullable(); // 改进计划
            $table->text('development_suggestions')->nullable(); // 发展建议
            $table->text('comments')->nullable(); // 评定人评语

            // 目标与成果
            $table->json('goals')->nullable(); // 工作目标
            $table->json('achievements')->nullable(); // 工作成果
            $table->json('kpis')->nullable(); // KPI达成情况

            // 能力分析
            $table->json('competency_analysis')->nullable(); // 能力分析
            $table->json('skill_gaps')->nullable(); // 技能差距
            $table->json('training_needs')->nullable(); // 培训需求

            // 薪资建议
            $table->decimal('current_salary', 10, 2)->nullable(); // 当前薪资
            $table->decimal('recommended_salary', 10, 2)->nullable(); // 建议薪资
            $table->string('salary_adjustment_reason', 200)->nullable(); // 调薪理由
            $table->date('salary_effective_date')->nullable(); // 薪资生效日期

            // 晋升建议
            $table->boolean('promotion_recommended')->default(false); // 是否建议晋升
            $table->string('recommended_position', 100)->nullable(); // 建议岗位
            $table->string('promotion_reason', 200)->nullable(); // 晋升理由
            $table->date('promotion_effective_date')->nullable(); // 晋升生效日期

            // 审批流程
            $table->string('status', 20)->default('draft'); // 状态：draft, submitted, reviewed, approved, rejected
            $table->string('submitted_by', 100)->nullable(); // 提交人
            $table->date('submitted_at')->nullable(); // 提交时间
            $table->string('reviewed_by', 100)->nullable(); // 审核人
            $table->date('reviewed_at')->nullable(); // 审核时间
            $table->string('approved_by', 100)->nullable(); // 批准人
            $table->date('approved_at')->nullable(); // 批准时间
            $table->text('review_comments')->nullable(); // 审核意见

            // 附件信息
            $table->json('attachments')->nullable(); // 相关附件

            // 统计信息
            $table->integer('version')->default(1); // 版本号
            $table->boolean('is_latest')->default(true); // 是否最新版本
            $table->boolean('is_active')->default(true); // 是否有效

            // 索引
            $table->index(['employee_id']);
            $table->index(['evaluator_id']);
            $table->index(['assessment_type']);
            $table->index(['assessment_period']);
            $table->index(['status']);
            $table->index(['assessment_date']);
            $table->index(['is_latest']);
            $table->index(['is_active']);
            $table->index(['employee_id', 'assessment_date']);
            $table->index(['assessment_type', 'assessment_period']);

            // 外键约束
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
            $table->foreign('evaluator_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('ability_assessments');
    }
};
